var async = require('async');   

/*
1.串行无关联：async.series(tasks,callback);     
多个函数依次执行,之间没有数据交换,其中一个函数出错，后续函数不再执行
*/
/*
function exec(){  
    async.series({   
        one: function(done){  
            ii=0;  
            setInterval(function(){  
                console.log('aaa='+new Date());  
                ii++;  
                if(ii==3){  
                    clearInterval(this);  
                    done(null,{one:"one"});  
                }  
            },1000);  
        },  
        two: function(done){  
            jj=0;  
            setInterval(function(){  
                console.log('bbb='+new Date());  
                jj++;  
                if(jj>3){  
                    clearInterval(this);  
                    done(null,{two:"two"});  
                }  
            },1000);  
        }  
    }, function(err,rs) {   
            console.log(err);  
            console.log(rs);  
        });  
}  
*/
/*
2.并行无关联：async.parallel(tasks,callback);     
多个函数并行执行，最后汇总结果,如果某一个流程出错就退出 
*/
/*
function exec(){  
    async.parallel({   
        one: function(done){  
            ii=0;  
            setInterval(function(){  
                console.log('aaa='+new Date());  
                ii++;  
                if(ii==3){  
                    clearInterval(this);  
                    done(null,{one:"one"});  
                }  
            },1000);  
        },  
        two: function(done){  
            jj=0;  
            setInterval(function(){  
                console.log('bbb='+new Date());  
                jj++;  
                if(jj>3){  
                    clearInterval(this);  
                    done(null,{two:"two"});  
                }  
            },1000);  
        }  
    }, function(err,rs) {   
            console.log(err);  
            console.log(rs);  
        });  
}
*/
/*
3.串行有关联:waterfall      
每一步执行时需要由上一步执行的结果当做参数.所以每一步必须串行等待  
*/
function exec(){ 
    async.waterfall( 
        [ 
            function(done){ 
                ii=0; 
                setInterval(function(){ 
                    console.log("aaa="+new Date()); 
                    ii++; 
                    if(ii==3){ 
                        clearInterval(this); 
                        done(null,'one完毕'); 
                    } 
                },1000); 
            }, 
            function(preValue,done){ 
                jj=0; 
                setInterval(function(){ 
                    console.log(preValue+"="+new Date()); 
                    jj++; 
                    if(jj==3){ 
                        clearInterval(this); 
                        done(null, 'two完毕'); 
                    } 
                },1000); 
                 
            } 
        ],function(err,rs){ 
            console.log(err); 
            console.log(rs); 
        }     
    ) 
} 

exec();     
     
console.log('主进程完毕');